package io.github.wppli.infrastructure.persistent.dao;

import io.github.wppli.infrastructure.persistent.po.ProductOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author lijiaqiang@ljq1024.cc
 * @since 2025-03-19
 */
@Mapper
public interface IProductOrderDao extends BaseMapper<ProductOrder> {

    /** 查询未支付订单 */
    ProductOrder queryUnpaidOrder(ProductOrder productOrder);

    /** 更新订单信息 */
    void updateOrderPayInfo(ProductOrder productOrder);

    /** 更新订单为支付成功的状态 -> 即等待发货状态 */
    int changeOrderPaySuccess(ProductOrder productOrder);

    /** 查询订单 */
    ProductOrder queryOrder(@Param("orderId") String orderId);

    /**
     * 订单状态；0-创建完成、1-等待发货、2-发货完成、3-系统关单
     * 支付状态；0-等待支付、1-支付完成、2-支付失败、3-放弃支付
     * 查询补货订单 -> 查询支付完成但超过3分钟仍未在等待发货的订单
     */
    List<String> queryReplenishmentOrder();

    /**
     * 订单状态；0-创建完成、1-等待发货、2-发货完成、3-系统关单
     * 支付状态；0-等待支付、1-支付完成、2-支付失败、3-放弃支付
     * 查询未支付通知订单 -> 查询订单创建完成但超过1分钟仍未在等待支付的订单
     */
    List<String> queryNoPayNotifyOrder();

    /**
     /**
     * 订单状态；0-创建完成、1-等待发货、2-发货完成、3-系统关单
     * 支付状态；0-等待支付、1-支付完成、2-支付失败、3-放弃支付
     * 查询未支付通知订单(回调失败) -> 查询订单创建完成但超过1分钟仍未在等待支付的订单
     * 回调失败, 即使支付成功了, 系统没收到通知, 也应该是等待支付状态和订单创建完成状态(支付成功才是等待发货状态).
     */
    List<String> queryTimeoutCloseOrderList();

    /** 关闭超时订单 */
    boolean changeOrderClose(@Param("orderId") String orderId);

}
